package com.jl.mapper;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jl.model.FaultInfo;
import com.jl.model.in.UserGrade;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 故障信息表 Mapper 接口
 * </p>
 *
 * @author JiangJian
 * @since 2019-03-06
 */
public interface FaultInfoMapper extends BaseMapper<FaultInfo> {

    /**
     * 获取某台设备本周(月)的故障信息
     * @param deviceId 设备id
     * @param type 类型 1：周，2：月
     *@param time 可以是日期或者月份
     * @return
     */
    List<FaultInfo> selectWeekMonthFaultInfo(@Param("deviceId") Long deviceId,@Param("type")Integer type,@Param("time")String time);

    /**
     * 获取某月所有用户作为主维修人员的次数
     * @param month 月份
     * @param id  用户id
     * @return
     */
    List<UserGrade> selectAllUserMasterSolverCount(@Param("month") String month,@Param("id")Long id);
    /**
     * 获取某月所有辅助维修人员的维修次数
     * @param month 月份
     * @return
     */
    List<String> selectAllUserAssistSolverCount(@Param("month") String month);

    /**
     * 获取某月某人的辅助维修次数信息
     * @param month
     * @param id
     * @return
     */
    Integer selectAssistSolverCountByUserId(@Param("month") String month,@Param("id")Long id);

    /**
     * 查询设备信息列表
     * 这里的Param中必须使用 ew为名称 这是因为使用了mybatisplus中的内定的参数
     * 且在xml中必须是使用 美元符 $ 来作为占位符
     * @param page
     * @param qw
     * @return
     */
    List<Map<String,Object>> selectDataGrid(Page<Map<String,Object>> page, @Param("ew") QueryWrapper<FaultInfo> qw);

    /**
     * 查找包含某关键词的所有设备的故障信息
     * @param page 分页参数
     * @param keyWordId 关键词id
     * @return
     */
    List<Map<String,Object>> selectFaultInfoByKeyWordId(Page<Map<String,Object>> page,@Param("keyWordId")Long keyWordId);

    /**
     * 查询某条生产线上的所有故障信息
     * @param page 分页参数
     * @param lineId 关键词id
     * @return
     */
    List<Map<String,Object>> selectFaultInfoByLineId(Page<Map<String,Object>> page,@Param("lineId")Long lineId);


    /**
     * 更新采纳数量
     * @param id 故障id
     * @param acceptNum 采纳数量
     * @return 更新结果
     */
    Integer updateFaultInfoAcceptNum(@Param("id")Long id,@Param("acceptNum")Integer acceptNum);
    /**
     * 同一台设备：根据device_id 和 symptom相同的值视为重复故障
     * @param startTime 时间区间
     * @param endTime 时间区间
     * @return
     */
    List<Map<String,Object>> selectSameDeviceAndSameSymptomFaultInfo(@Param("statTime")String startTime,@Param("endTime") String endTime);
    /**
     * 非同一台设备：获得有相同的故障现象的 故障信息
     * @param startTime 时间区间
     * @param endTime 时间区间
     * @return
     */
    List<Map<String,Object>> selectSameSymptomFaultInfo(Page<Map<String,Object>> page,@Param("statTime")String startTime,@Param("endTime") String endTime);

    /**
     * 根据关键词查询 某台设备的故障信息
     * @param page 分页参数
     * @param keyWord 关键词id
     * @param deviceId 设备id
     * @return 结果集合
     */
    List<Map<String,Object>> selectDeviceFaultWithKeyWord(Page<Map<String,Object>> page,@Param("keyWord") Long keyWord,@Param("deviceId") Long deviceId);

}
